home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / blank / bserver_v14.lha / BServer_v1.4 / Sources.lha / Sources / server / window.c < prev   
Encoding:
C/C++ Source or Header  |  1995-03-23  |  6.6 KB  |  290 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <intuition/intuition.h>
  4. #include <libraries/commodities.h>
  5. #include <stdio.h>
  6.  
  7. #include <proto/exec.h>
  8. #include <proto/commodities.h>
  9. #include <proto/intuition.h>
  10. #include <proto/graphics.h>
  11. #include <proto/gadtools.h>
  12. #include <proto/dos.h>
  13. #include <clib/alib_protos.h>
  14.  
  15. #include "/include/server.h"
  16.  
  17. #define MUST_RETRY 0
  18. #define MUST_BLANK 1
  19.  
  20. extern struct List ClientsList;
  21.  
  22. extern UWORD fonth, wleft, wtop, DefaultClient, delaySecs, delayEvents;
  23. extern UBYTE briLevel;
  24. extern BOOL Blanking, RandomClient, CommodityActive, StayCool, BlankStatus;
  25. extern struct Gadget *glist, *random_gdg, *modeid_gdg, *list_gdg;
  26. extern CxObj *broker;
  27.  
  28. extern struct Screen *WBS;
  29. extern struct VisualInfo *vi;
  30. extern struct TextAttr topazFont;
  31.  
  32. extern BOOL SetUpGadgets(void);
  33. extern void RemoveGadgets(void);
  34.  
  35. extern void AskFiles( void );
  36.  
  37. extern void ClearPendingMessages( struct MsgPort * );
  38.  
  39. extern void StartBlanking( void );
  40. extern void RemoveClient( UWORD, char * );
  41. extern void SendCommandToClient( ULONG );
  42.  
  43. extern void GetDisplayIDFromNode( UWORD );
  44. extern struct ModeNode *DisplayNode;
  45. extern ULONG DisplayID;
  46.  
  47. extern char *msg_timeout, *msg_random, *key_random,
  48.      *msg_hide, *key_hide, *msg_quit, *key_quit, *msg_blank, *key_blank,
  49.      *msg_killsel, *key_killsel, *msg_addcli, *key_addcli;
  50.  
  51. extern BOOL stop_on_mouse, stop_on_disk;
  52.  
  53. extern struct NewBroker newbroker;
  54.  
  55.  /***************
  56.  *              *
  57.  * WINDOW STUFF *
  58.  *              *
  59.  ***************/
  60.  
  61. struct NewMenu bservernewmenus[] = {
  62.     { NM_TITLE, NULL,         0, 0, 0, 0 },
  63.     { NM_ITEM,  NULL,         0, 0, 0, (APTR)MENUID_ABOUT },
  64.     { NM_ITEM,  NULL,         0, 0, 0, (APTR)MENUID_HIDE },
  65.     { NM_ITEM,  NULL,          0, 0, 0, (APTR)MENUID_QUIT },
  66.     { NM_TITLE, NULL,         0, 0, 0, 0 },
  67.     { NM_ITEM,  NULL,         0, CHECKIT|MENUTOGGLE, 0, (APTR)MENUID_RAWMOUSE },
  68.     { NM_ITEM,  NULL,         0, CHECKIT|MENUTOGGLE, 0, (APTR)MENUID_DISK },
  69.     { NM_END,   NULL,         0, 0, 0, 0 } };
  70.  
  71. struct EasyStruct easyabout = {
  72.     sizeof(struct EasyStruct), 0, "BServer", NULL, NULL };
  73.  
  74. struct Window *window;
  75. char wname[100];
  76. ULONG windowSignal = NULL;
  77. UWORD wwidth, wheight;
  78. struct Menu *bsmenus;
  79. struct Screen *wbs;
  80.  
  81.  
  82. void DetachGadgets( void )
  83. {
  84. GT_SetGadgetAttrs( list_gdg, window, NULL, GTLV_Labels, ~0, TAG_END );
  85. }
  86.  
  87.  
  88. void AttachGadgets( void )
  89. {
  90. GT_SetGadgetAttrs( list_gdg, window, NULL, GTLV_Labels, &ClientsList, GTLV_Selected, DefaultClient,    TAG_END );
  91. }
  92.  
  93.  
  94. BOOL PopUpWindow( void )
  95. {
  96. if ( window )
  97.     {
  98.     ActivateWindow( window );
  99.     WindowToFront( window );
  100.     return( TRUE );
  101.     }
  102.  
  103. if ( wbs = LockPubScreen( NULL ) )
  104.     {
  105.     if ( SetUpGadgets() )
  106.         {
  107.         if ( window = OpenWindowTags( NULL,
  108.                         WA_Width, wwidth,
  109.                         WA_Height, wheight,
  110.                         WA_Left, wleft,
  111.                         WA_Top, wtop,
  112.                         WA_Gadgets, glist,
  113.                         WA_Title, wname,
  114.                         WA_ScreenTitle, newbroker.nb_Title,
  115.                         WA_IDCMP, IDCMP_VANILLAKEY | IDCMP_GADGETUP | IDCMP_CLOSEWINDOW | IDCMP_MENUPICK | INTEGERIDCMP | LISTVIEWIDCMP | BUTTONIDCMP | CHECKBOXIDCMP,
  116.                         WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_ACTIVATE,
  117.                         TAG_END ) )
  118.             {
  119.             if ( bsmenus = CreateMenus( bservernewmenus, TAG_END ) )
  120.                 {
  121.                 if ( LayoutMenus( bsmenus, vi, TAG_END ) )
  122.                     {
  123.                     if ( SetMenuStrip( window, bsmenus ) )
  124.                         {
  125.                         GT_RefreshWindow( window, NULL );
  126.                         AttachGadgets();
  127.                         windowSignal = 1L << window->UserPort->mp_SigBit;
  128.                         return( TRUE );
  129.                         }
  130.                     }
  131.                 FreeMenus( bsmenus );
  132.                 }
  133.             CloseWindow( window );
  134.             }
  135.         RemoveGadgets();
  136.         }
  137.     UnlockPubScreen( NULL, wbs );
  138.     }
  139. DisplayBeep( NULL );
  140. return( FALSE );
  141. }
  142.  
  143.  
  144. void ShutWindow( void )
  145. {
  146. if ( window )
  147.     {
  148.     ClearMenuStrip( window );
  149.     FreeMenus( bsmenus );
  150.     ClearPendingMessages( window->UserPort );
  151.     wleft = window->LeftEdge;
  152.     wtop = window->TopEdge;
  153.     CloseWindow( window );
  154.     window = NULL;
  155.     windowSignal = NULL;
  156.     RemoveGadgets();
  157.     UnlockPubScreen( NULL, wbs );
  158.     }
  159. }
  160.  
  161.  
  162. void HandleWindowMessages( void )
  163. {
  164. struct IntuiMessage *imsg;
  165. ULONG class;
  166. UWORD code;
  167. ULONG addr;
  168. ULONG menuid;
  169.  
  170. while( window && StayCool && ( imsg = GT_GetIMsg( window->UserPort ) ) )
  171.     {
  172.     class = imsg->Class;
  173.     code = imsg->Code;
  174.     addr = (ULONG)imsg->IAddress;
  175.     GT_ReplyIMsg( imsg );
  176.  
  177.     switch( class )
  178.         {
  179.         case IDCMP_MENUPICK:
  180.             if ( code != MENUNULL )
  181.                 {
  182.                 menuid = (ULONG)GTMENUITEM_USERDATA( ItemAddress( bsmenus, code ) );
  183.                 switch ( menuid )
  184.                     {
  185.                     case MENUID_ABOUT:
  186.                         EasyRequestArgs( window, &easyabout, NULL, NULL );
  187.                         break;
  188.                     case MENUID_HIDE:
  189.                         ShutWindow();
  190.                         break;
  191.                     case MENUID_QUIT:
  192.                         StayCool = FALSE;
  193.                         break;
  194.                     case MENUID_RAWMOUSE:
  195.                         stop_on_mouse ^= TRUE;
  196.                         break;
  197.                     case MENUID_DISK:
  198.                         stop_on_disk ^= TRUE;
  199.                         break;
  200.                     }
  201.                 }
  202.             break;
  203.  
  204.         case IDCMP_VANILLAKEY:
  205.                 code ^= 32;
  206.                 if ( code == *key_random )
  207.                     {
  208.                     RandomClient ^= TRUE;
  209.                     GT_SetGadgetAttrs( random_gdg, window, NULL, GTCB_Checked, RandomClient, TAG_END );
  210.                     }
  211.                 else if ( code == *key_hide )
  212.                     ShutWindow();
  213.                 else if ( code == *key_quit )
  214.                     StayCool = FALSE;
  215.                 else if ( code == *key_blank )
  216.                     {
  217.                     if ( CommodityActive && !Blanking && BlankStatus != MUST_BLANK )
  218.                         {
  219.                         Delay( 10 );
  220.                         BlankStatus = MUST_BLANK;
  221.                         StartBlanking();
  222.                         }
  223.                     }
  224.                 else if ( code == *key_addcli )
  225.                     AskFiles();
  226.                 else if ( code == *key_killsel )
  227.                     RemoveClient( DefaultClient, NULL );
  228.             break;
  229.  
  230.         case IDCMP_REFRESHWINDOW:
  231.             GT_BeginRefresh( window );
  232.             GT_EndRefresh( window, TRUE );
  233.             break;
  234.  
  235.         case IDCMP_CLOSEWINDOW:
  236.             ShutWindow();
  237.             break;
  238.  
  239.         case IDCMP_GADGETUP:
  240.             switch( ((struct Gadget *)addr)->GadgetID )
  241.                 {
  242.                 case TIMEOUT_GDG:
  243.                     delaySecs = ((struct StringInfo *)((struct Gadget *)addr)->SpecialInfo)->LongInt;
  244.                     delayEvents = delaySecs * 10;
  245.                     break;
  246.                 case RANDOM_GDG:
  247.                     RandomClient ^= TRUE;
  248.                     break;
  249.                 case HIDE_GDG:
  250.                     ShutWindow();
  251.                     break;
  252.                 case QUIT_GDG:
  253.                     StayCool = FALSE;
  254.                     break;
  255.                 case BLANK_GDG:
  256.                     if ( CommodityActive && !Blanking && BlankStatus != MUST_BLANK )
  257.                         {
  258.                         Delay( 10 );
  259.                         BlankStatus = MUST_BLANK;
  260.                         StartBlanking();
  261.                         }
  262.                     break;
  263.                 case MODEID_GDG:
  264.                     GetDisplayIDFromNode( code );
  265.                     break;
  266.                 case ADDCLIENTS_GDG:
  267.                     AskFiles();
  268.                     break;
  269.                 case KILL_GDG:
  270.                     RemoveClient( DefaultClient, NULL );
  271.                     break;
  272.                 case LIST_GDG:
  273.                     DefaultClient = code;
  274.                     break;
  275.                 case BRILEVEL_GDG:
  276.                     briLevel = ((struct StringInfo *)((struct Gadget *)addr)->SpecialInfo)->LongInt;
  277.                     if ( briLevel < 0 || briLevel > 100 )
  278.                         {
  279.                         briLevel = 100;
  280.                         GT_SetGadgetAttrs( (struct Gadget *)addr, window, NULL, GTIN_Number, 100, TAG_END );
  281.                         }
  282.                     break;
  283.                 }
  284.  
  285.         default:
  286.             break;
  287.         }
  288.     }
  289. }
  290.